package cn.xiaolang.function.network.communicate;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class UploadClient {

	public static void main(String[] args) throws IOException {
		// 创建一个客户端对象，并指定服务端的ip和端口号
		Socket client=new Socket("192.168.191.4",10011);
		
		/*************获取文件数据***********************/
		//要上传文件的路径
		File file=new File("E:\\test\\Demo1.txt");
		if(!file.exists()){
			throw new RuntimeException("源文件不存在");
		}
		//用字符输入流对象，来读取文件
		FileReader fr=new FileReader(file);
		
		/****************打包数据到打印流中**************/
		//获取客户端对象的输出流对象，用来向服务端发送数据
		OutputStream out=client.getOutputStream();
		//把要发送的数据，封装在打印流中，并开启打印流的自动刷新功能
		PrintWriter pw=new PrintWriter(out,true);
		
		/******读取文件数据到打印流中，并发送到服务端*********/
		BufferedReader br=new BufferedReader(fr);
		String line=null;
		while((line=br.readLine())!=null){
			pw.println(line);//用打印流发送读取到的文件数据
		}
		br.close();
		//因为客户端在读完本地文件后，服务端并不知道已经读取完了，还在继续等待客户端发送数据
		//所以客户端在读完本地文件后，要向服务端发送一个标记，告诉服务端，数据已经发送完了
		//中端客户端的输出流
		client.shutdownOutput();
		
		/********客户端接收从服务端，返回的消息*****************/
		InputStream input=client.getInputStream();
		byte[]buf=new byte[1024];
		int len=input.read(buf);
		System.out.println("从服务端回馈的消息："+new String(buf,0,len));
		pw.close();
		client.close();
	}

}
